import { _decorator, Component, Node, Prefab, instantiate, director } from 'cc';
import { AudioManager } from './AudioManager';
import { GameManager } from './GameManager';
const { ccclass, property } = _decorator;

/**
 * 初始化管理器
 * 负责确保核心管理器组件在游戏启动时被正确初始化
 */
@ccclass('InitManager')
export class InitManager extends Component {
    @property(Prefab)
    private audioManagerPrefab: Prefab = null;
    
    @property(Prefab)
    private gameManagerPrefab: Prefab = null;
    
    start() {
        this.initManagers();
    }
    
    /**
     * 初始化所有管理器
     */
    private initManagers(): void {
        console.log("开始初始化管理器...");
        
        // 只需初始化AudioManager和GameManager
        this.initAudioManager();
        this.initGameManager();
        
        // 最终检查
        console.log("管理器初始化完成");
        console.log("AudioManager存在:", !!AudioManager.instance);
        console.log("GameManager存在:", !!GameManager.instance);
    }
    
    /**
     * 初始化音频管理器
     */
    private initAudioManager(): void {
        // 检查是否已经存在实例
        if (AudioManager.instance && AudioManager.instance.isValid) {
            console.log("AudioManager已存在，无需初始化");
            return;
        }
        
        // 从预制体创建
        if (this.audioManagerPrefab) {
            const node = instantiate(this.audioManagerPrefab);
            director.getScene().addChild(node);
            console.log("从预制体创建AudioManager成功");
        } else {
            // 手动创建
            const node = new Node('AudioManager');
            node.addComponent(AudioManager);
            director.getScene().addChild(node);
            console.log("手动创建AudioManager成功");
        }
    }
    
    /**
     * 初始化游戏管理器
     */
    private initGameManager(): void {
        // 检查是否已经存在实例
        if (GameManager.instance && GameManager.instance.isValid) {
            console.log("GameManager已存在，无需初始化");
            return;
        }
        
        // 从预制体创建
        if (this.gameManagerPrefab) {
            const node = instantiate(this.gameManagerPrefab);
            director.getScene().addChild(node);
            console.log("从预制体创建GameManager成功");
        } else {
            // 手动创建
            const node = new Node('GameManager');
            node.addComponent(GameManager);
            director.getScene().addChild(node);
            console.log("手动创建GameManager成功");
        }
    }
} 